//1.创建管理的状态 === 共享的数据
let initState = {
    todolist: [
        { id: 1, title: 'xxx', sed: false },
        { id: 2, title: 'yyy', sed: false },
    ],
    n: 100
}


//2.创建一个管理员函数 === 修改状态 返回新状态
/* 
2个形参:管理的原状态 action对象:描述如何修改状态的对象(组件传来的)

*/
function reducer(oldState, action) {


    //深拷贝原状态
    let newState = JSON.parse(JSON.stringify(oldState))

    let { type, payload } = action

    //添加
    if (type === 'add_list') {
        newState.todolist.push(payload)
    }

    //删除
    if (type === 'del_list') {
        newState.todolist = newState.todolist.filter(item => {
            return item.id !== payload
        })
    }

    //修改sed状态
    if (type === 'sed_list') {
        newState.todolist.forEach(item => {
            if (item.id === payload) {
                return item.sed = !item.sed
            }
        })
    }
  
    //反选
    if (type == 'change_allsed') {
        newState.todolist.forEach(item => {
            item.sed = payload
        })
    }

    return newState //一定要返回状态,否则组件获取不到状态

}


//3.导出去 管理 和管理员函数 给 案例入口 组件 的useReducer
export {
    reducer, initState
}



